/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package SubsistemaPaciente;

import GUI.TaskPane.TaskPaneGroupPaciente;
import SubsistemaPaciente.Fichas.*;
import clienteSandraParada.Login;
import java.awt.Color;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author Hernán Garrido
 */
public class Paciente extends javax.swing.JPanel {

    FichaPodologa fichaPodo;
    FichaKine fichaKine;
    PanelKine p = null;
    DialogoInfoPaciente dip = new DialogoInfoPaciente(null, true, this);
    DialogoVerPaciente dvp = new DialogoVerPaciente(null, true);
    service.Usuario usuario = Login.getUser();

    public Paciente() throws FileNotFoundException, IOException {
        initComponents();
        this.actualizarTabla();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        dialogoEliminarPaciente = new javax.swing.JDialog();
        botonSiEliminar = new javax.swing.JButton();
        botonNoEliminar = new javax.swing.JButton();
        etiquetaEliminar = new javax.swing.JLabel();
        jPanel5 = new javax.swing.JPanel();
        jLabel4 = new javax.swing.JLabel();
        jScrollPane4 = new javax.swing.JScrollPane();
        tablaPacientes = new javax.swing.JTable();
        datosABuscar = new javax.swing.JTextField();
        jPanel6 = new javax.swing.JPanel();
        etiquetaMensajeria = new javax.swing.JLabel();
        jPanel7 = new javax.swing.JPanel();
        botonAgregarPaciente = new javax.swing.JButton();
        botonModificarPaciente = new javax.swing.JButton();
        botonEliminarPaciente = new javax.swing.JButton();
        botonVerPaciente = new javax.swing.JButton();
        jButton1 = new javax.swing.JButton();

        dialogoEliminarPaciente.setTitle("Eliminar paciente");
        dialogoEliminarPaciente.setMinimumSize(new java.awt.Dimension(420, 160));
        dialogoEliminarPaciente.setModal(true);
        dialogoEliminarPaciente.setResizable(false);

        botonSiEliminar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/Img/Iconos16X16/Aceptar.png"))); // NOI18N
        botonSiEliminar.setText("Si");
        botonSiEliminar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonSiEliminarActionPerformed(evt);
            }
        });

        botonNoEliminar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/Img/Iconos16X16/Cancelar.png"))); // NOI18N
        botonNoEliminar.setText("No");
        botonNoEliminar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonNoEliminarActionPerformed(evt);
            }
        });

        etiquetaEliminar.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        etiquetaEliminar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/Img/Iconos35X35/Papelera.png"))); // NOI18N
        etiquetaEliminar.setText("¿Confirma que desea enviar a la papelera los pacientes seleccionados?");

        javax.swing.GroupLayout dialogoEliminarPacienteLayout = new javax.swing.GroupLayout(dialogoEliminarPaciente.getContentPane());
        dialogoEliminarPaciente.getContentPane().setLayout(dialogoEliminarPacienteLayout);
        dialogoEliminarPacienteLayout.setHorizontalGroup(
            dialogoEliminarPacienteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, dialogoEliminarPacienteLayout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(botonSiEliminar, javax.swing.GroupLayout.PREFERRED_SIZE, 78, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(botonNoEliminar, javax.swing.GroupLayout.PREFERRED_SIZE, 78, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
            .addComponent(etiquetaEliminar, javax.swing.GroupLayout.DEFAULT_SIZE, 420, Short.MAX_VALUE)
        );
        dialogoEliminarPacienteLayout.setVerticalGroup(
            dialogoEliminarPacienteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(dialogoEliminarPacienteLayout.createSequentialGroup()
                .addGap(35, 35, 35)
                .addComponent(etiquetaEliminar)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 30, Short.MAX_VALUE)
                .addGroup(dialogoEliminarPacienteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(botonSiEliminar)
                    .addComponent(botonNoEliminar))
                .addContainerGap())
        );

        setPreferredSize(new java.awt.Dimension(953, 603));

        jPanel5.setBackground(new java.awt.Color(255, 255, 255));
        jPanel5.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1), "Pacientes", javax.swing.border.TitledBorder.CENTER, javax.swing.border.TitledBorder.TOP, new java.awt.Font("Tahoma", 0, 36))); // NOI18N

        jLabel4.setText("Buscar ");

        tablaPacientes.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Rut", "Nombres", "Apellido paterno", "Apellido materno", "Previsión", "Fecha de nacimiento", "Teléfono", "Celular"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class
            };
            boolean[] canEdit = new boolean [] {
                false, false, false, false, false, false, false, false
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        tablaPacientes.getTableHeader().setReorderingAllowed(false);
        tablaPacientes.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tablaPacientesMouseClicked(evt);
            }
        });
        jScrollPane4.setViewportView(tablaPacientes);

        datosABuscar.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                datosABuscarKeyReleased(evt);
            }
        });

        javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5);
        jPanel5.setLayout(jPanel5Layout);
        jPanel5Layout.setHorizontalGroup(
            jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel5Layout.createSequentialGroup()
                .addGap(728, 728, 728)
                .addComponent(jLabel4)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(datosABuscar, javax.swing.GroupLayout.PREFERRED_SIZE, 176, javax.swing.GroupLayout.PREFERRED_SIZE))
            .addComponent(jScrollPane4)
        );
        jPanel5Layout.setVerticalGroup(
            jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel5Layout.createSequentialGroup()
                .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel4)
                    .addComponent(datosABuscar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane4, javax.swing.GroupLayout.DEFAULT_SIZE, 409, Short.MAX_VALUE)
                .addContainerGap())
        );

        jPanel6.setBackground(new java.awt.Color(255, 255, 255));

        etiquetaMensajeria.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        etiquetaMensajeria.setText("Área de mensajería");

        javax.swing.GroupLayout jPanel6Layout = new javax.swing.GroupLayout(jPanel6);
        jPanel6.setLayout(jPanel6Layout);
        jPanel6Layout.setHorizontalGroup(
            jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(etiquetaMensajeria, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
        jPanel6Layout.setVerticalGroup(
            jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(etiquetaMensajeria, javax.swing.GroupLayout.DEFAULT_SIZE, 27, Short.MAX_VALUE)
        );

        jPanel7.setBackground(new java.awt.Color(255, 255, 255));

        botonAgregarPaciente.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/Img/Iconos35X35/Agregar.png"))); // NOI18N
        botonAgregarPaciente.setText("Agregar");
        botonAgregarPaciente.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        botonAgregarPaciente.setMargin(new java.awt.Insets(2, 4, 2, 6));
        botonAgregarPaciente.setMaximumSize(new java.awt.Dimension(97, 43));
        botonAgregarPaciente.setMinimumSize(new java.awt.Dimension(97, 43));
        botonAgregarPaciente.setPreferredSize(new java.awt.Dimension(97, 43));
        botonAgregarPaciente.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonAgregarPacienteActionPerformed(evt);
            }
        });

        botonModificarPaciente.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/Img/Iconos35X35/Edit.png"))); // NOI18N
        botonModificarPaciente.setText("Modificar");
        botonModificarPaciente.setMargin(new java.awt.Insets(2, 4, 2, 6));
        botonModificarPaciente.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonModificarPacienteActionPerformed(evt);
            }
        });

        botonEliminarPaciente.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/Img/Iconos35X35/delete_32x32x32.png"))); // NOI18N
        botonEliminarPaciente.setText("Eliminar");
        botonEliminarPaciente.setMargin(new java.awt.Insets(2, 4, 2, 6));
        botonEliminarPaciente.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonEliminarPacienteActionPerformed(evt);
            }
        });

        botonVerPaciente.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/Img/Iconos35X35/Previsualizar.png"))); // NOI18N
        botonVerPaciente.setText("Ver");
        botonVerPaciente.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        botonVerPaciente.setMargin(new java.awt.Insets(2, 4, 2, 6));
        botonVerPaciente.setMaximumSize(new java.awt.Dimension(97, 43));
        botonVerPaciente.setMinimumSize(new java.awt.Dimension(97, 43));
        botonVerPaciente.setPreferredSize(new java.awt.Dimension(97, 43));
        botonVerPaciente.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonVerPacienteActionPerformed(evt);
            }
        });

        jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/Img/Iconos35X35/agregarFicha.png"))); // NOI18N
        jButton1.setText("Agregar Ficha ");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel7Layout = new javax.swing.GroupLayout(jPanel7);
        jPanel7.setLayout(jPanel7Layout);
        jPanel7Layout.setHorizontalGroup(
            jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel7Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jButton1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(botonAgregarPaciente, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(botonModificarPaciente, javax.swing.GroupLayout.PREFERRED_SIZE, 117, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(botonEliminarPaciente, javax.swing.GroupLayout.PREFERRED_SIZE, 117, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(botonVerPaciente, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );

        jPanel7Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {botonAgregarPaciente, botonEliminarPaciente, botonModificarPaciente, botonVerPaciente});

        jPanel7Layout.setVerticalGroup(
            jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel7Layout.createSequentialGroup()
                .addGap(13, 13, 13)
                .addGroup(jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(botonModificarPaciente)
                    .addComponent(botonVerPaciente, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(botonAgregarPaciente, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(botonEliminarPaciente, javax.swing.GroupLayout.PREFERRED_SIZE, 43, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );

        jPanel7Layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {botonAgregarPaciente, botonEliminarPaciente, botonModificarPaciente, botonVerPaciente});

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel6, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addComponent(jPanel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addComponent(jPanel7, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addComponent(jPanel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel7, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
        );
    }// </editor-fold>//GEN-END:initComponents

    public void filtrarTabla(java.util.List<service.Paciente> pacientes) {
        this.limpiarTabla();
        int i = 0;
        for(service.Paciente paciente : pacientes){
            if(usuario.getTipoCuenta().equalsIgnoreCase("Profesional")){
                java.util.List<service.EnlaceProfesionalPaciente> enlaces = listarEnlaceProfesionalPacientes();
                for (service.EnlaceProfesionalPaciente enlace : enlaces) {
                    if (enlace.getRutProfesional().equals(usuario.getRut()) && enlace.getRutPaciente().equals(paciente.getRut())) {
                        if (paciente.isVisible()) {
                            this.insertarEntabla(paciente, i);
                        }     
                    }
                }
            }
            else{
                if (paciente.isVisible()) {
                    this.insertarEntabla(paciente, i);
                    i++;
                }
            }
        }
    }
    
    public void insertarEntabla(service.Paciente paciente, int i){
        this.agregarFila();
        tablaPacientes.setValueAt(paciente.getRut(), i, 0);
        tablaPacientes.setValueAt(paciente.getNombres(), i, 1);
        tablaPacientes.setValueAt(paciente.getApellidoPaterno(), i, 2);
        tablaPacientes.setValueAt(paciente.getApellidoMaterno(), i, 3);
        tablaPacientes.setValueAt(paciente.getPrevision(), i, 4);
        tablaPacientes.setValueAt(paciente.getFechaNac(), i, 5);
        tablaPacientes.setValueAt(paciente.getTelefono(), i, 6);
        tablaPacientes.setValueAt(paciente.getCelular(), i, 7);
    }

    public void actualizarTabla() {
        this.limpiarTabla();
        int i = 0;        
        if(usuario.getTipoCuenta().equalsIgnoreCase("Profesional")){
            java.util.List<service.EnlaceProfesionalPaciente> enlaces = listarEnlaceProfesionalPacientes();
            for (service.EnlaceProfesionalPaciente enlace : enlaces) {
                if (enlace.getRutProfesional().equals(usuario.getRut())) {
                    service.Paciente paciente = (service.Paciente) cargarPaciente(enlace.getRutPaciente());
                    if (paciente.isVisible()) {
                        this.insertarEntabla(paciente, i);
                    }     
                }
            }
        }
        else{
            java.util.List<service.Paciente> pacientes = (java.util.List<service.Paciente>) listarPacientes();
            for (service.Paciente paciente : pacientes) {
                if (paciente.isVisible()) {
                    this.insertarEntabla(paciente, i);
                    i++;
                }
            }
        }
    }

    public void agregarFila() {
        DefaultTableModel temp = (DefaultTableModel) tablaPacientes.getModel();
        Object nuevo[] = {"", "", "", "", "", "", "", ""};
        temp.addRow(nuevo);
    }

    private void botonModificarPacienteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonModificarPacienteActionPerformed
        service.Privilegios pri = (service.Privilegios) cargarPrivilegios(Login.getUser().getRut());
        if (pri.isModificarPaciente()) {
            this.normalizarEtiquetaMensajeria();
            dip.normalizarMensajeria();
            if (tablaPacientes.getSelectedRow() == -1) {
                this.cambiarEtiquetaMensajeria("Debe seleccionar un paciente para ser modificado", Color.red);
            } else {
                dip.normalizarMensajeria();
                dip.setLocationRelativeTo(null);
                dip.setTitle("Modificar Paciente");
                dip.getBotonAceptar().setText("Guardar");
                dip.getBotonAceptar().setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/Img/Iconos16X16/Aceptar.png")));
                service.Paciente pac = (service.Paciente) cargarPaciente(((String) tablaPacientes.getValueAt(tablaPacientes.getSelectedRow(), 0)));
                dip.llenarCampos(pac);
                dip.setRutEnabled(false);
                dip.setVisible(true);
            }
        } else {
            JOptionPane.showMessageDialog(this, "No tiene permisos para esta acción, \n contacte al administrador para más información");
        }
    }//GEN-LAST:event_botonModificarPacienteActionPerformed

    private void botonEliminarPacienteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonEliminarPacienteActionPerformed
        service.Privilegios priv = (service.Privilegios) cargarPrivilegios(Login.getUser().getRut());
        if (priv.isEliminarPaciente()) {
            this.normalizarEtiquetaMensajeria();
            int cont = 0;
            for (int i = 0; i < tablaPacientes.getRowCount(); i++) {
                if (tablaPacientes.isRowSelected(i)) {
                    cont++;
                }
            }
            if (cont >= 1) {
                if (cont > 1) {
                    etiquetaEliminar.setText("¿Confirma que desea enviar a la papelera los pacientes seleccionados?");
                } else if (cont == 1) {
                    etiquetaEliminar.setText("¿Confirma que desea enviar a la papelera el paciente seleccionado?");
                }
                dialogoEliminarPaciente.setLocationRelativeTo(null);
                dialogoEliminarPaciente.setVisible(true);
            } else {
                this.cambiarEtiquetaMensajeria("Debe seleccionar un paciente para ser eliminado", Color.red);
            }
        } else {
            JOptionPane.showMessageDialog(this, "No tiene permisos para esta acción, \n contacte al administrador para más información");
        }
    }//GEN-LAST:event_botonEliminarPacienteActionPerformed

    private void botonAgregarPacienteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonAgregarPacienteActionPerformed
        service.Privilegios priv = (service.Privilegios) cargarPrivilegios(Login.getUser().getRut());
        if (priv.isAgregarPaciente()) {
            this.normalizarEtiquetaMensajeria();
            dip.normalizarMensajeria();
            dip.setLocationRelativeTo(null);
            dip.limpiarCampos();
            dip.setTitle("Agregar Paciente");
            dip.getBotonAceptar().setText("Agregar");
            dip.getBotonAceptar().setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/Img/Iconos16X16/Agregar.png")));
            dip.setRutEnabled(true);
            dip.agregarFocusListenerRutPaciente();
            dip.setVisible(true);
        } else {
            JOptionPane.showMessageDialog(this, "No tiene permisos para esta acción, \n contacte al administrador para más información");
        }
    }//GEN-LAST:event_botonAgregarPacienteActionPerformed

    private void botonNoEliminarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonNoEliminarActionPerformed
        dialogoEliminarPaciente.dispose();
    }//GEN-LAST:event_botonNoEliminarActionPerformed

    private void botonSiEliminarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonSiEliminarActionPerformed
        dialogoEliminarPaciente.dispose();
        for (int i = 0; i < tablaPacientes.getRowCount(); i++) {
            if (tablaPacientes.isRowSelected(i)) {
                String rut = (String) tablaPacientes.getValueAt(i, 0);
                String nombre = tablaPacientes.getValueAt(i, 1).toString() + " " + tablaPacientes.getValueAt(i, 2) + " " + tablaPacientes.getValueAt(i, 3);
                eliminarPaciente(rut);
                registrar(Login.getUser(), "Paciente", "Eliminó paciente: " + rut,"No aplica", "Rut: " + rut + "\nNombre:" + nombre);
            }
        }
        this.actualizarTabla();
        
    }//GEN-LAST:event_botonSiEliminarActionPerformed

    private void botonVerPacienteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonVerPacienteActionPerformed
        service.Privilegios pri = (service.Privilegios) cargarPrivilegios(Login.getUser().getRut());
        if (pri.isVerPaciente()) {
            this.normalizarEtiquetaMensajeria();
            if (tablaPacientes.getSelectedRow() == -1) {
                this.cambiarEtiquetaMensajeria("Debe seleccionar un paciente para verlo", Color.red);
            } 
            else {
                this.normalizarEtiquetaMensajeria();
                dvp.setLocationRelativeTo(null);
                service.Paciente pac = (service.Paciente) cargarPaciente(((String) tablaPacientes.getValueAt(tablaPacientes.getSelectedRow(), 0)));
                dvp.llenarCampos(pac);
                dvp.setVisible(true);
            }
        } else {
            JOptionPane.showMessageDialog(this, "No tiene permisos para esta acción, \n contacte al administrador para más información");
        }
    }//GEN-LAST:event_botonVerPacienteActionPerformed

    private int filaSelec() {
        for (int i = 0; i < tablaPacientes.getRowCount(); i++) {
            if (tablaPacientes.isRowSelected(i)) {
                return i;
            }
        }
        //no ha seleccionado una fila de la tabla principal de las fichas
        return -1;
    }

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
        //Agregar Ficha Clinica
        service.Paciente pac = new service.Paciente();
        int[] filasSelec= tablaPacientes.getSelectedRows();
        if (filasSelec.length == 1) {
            int fila = filasSelec[0];
            String rutPaciente = (String) this.tablaPacientes.getValueAt(fila, 0);
            //numero de ficha seleccionada
            service.PacienteWS_Service service = new service.PacienteWS_Service();
            service.PacienteWS port = service.getPacienteWSPort();
            java.util.List<service.Paciente> pacientes = port.listarPacientes();
            //buscar la ficha clinica por el id de la ficha
            for (int i = 0; i < pacientes.size(); i++) {
                if (pacientes.get(i).getRut().equals(rutPaciente)) {
                    pac = pacientes.get(i);
                }
            }
            service.Privilegios priv = (service.Privilegios) cargarPrivilegios(Login.getUser().getRut());

            if (priv.isAgregarFichaPodologia()) {
                PanelPodologia pp = new PanelPodologia();
                fichaPodo = new FichaPodologa(null, true, pp);
                fichaPodo.limpiarFormularioPodo();
                fichaPodo.llenarFormularioPodologa(pac);
                fichaPodo.setTitle("Agregar Ficha Podologia");
                fichaPodo.ocultarAsteriscosFormulario(false);
                fichaPodo.setSize(1105, 530);
                fichaPodo.setLocationRelativeTo(null);
                fichaPodo.setVisible(true);
            }
            if (priv.isAgregarFichaKinesiologica()) {
                PanelKine pk = new PanelKine();
                fichaKine = new FichaKine(null, true, pk);
                fichaKine.LimpiarFormularioFicha();
                fichaKine.setTitle("Agregar Ficha Clinica");
                fichaKine.llenarCamposFichaClinica(pac, "agregar");
                fichaKine.ocultarAsteriscosFormulario(false);
                fichaKine.setSize(1100, 643);
                fichaKine.setLocationRelativeTo(null);
                fichaKine.setVisible(true);
            }//ingresa constanza campusano al sistema
            if (priv.isAgregarFichaPsicoligia()) {
                PanelSicologia ps = new PanelSicologia();
                FichaSicologa fichaSico = new FichaSicologa(null, true, ps);
                fichaSico.limpiarFormularioSico();
                fichaSico.setTitle("Agregar Ficha Psicologia");
                fichaSico.ocultarAsteriscosFormulario(false);
                fichaSico.setSize(1064, 530);
                fichaSico.llenarFormularioAgregar(pac);
                fichaSico.setLocationRelativeTo(null);
                fichaSico.setVisible(true);
            }//ingresa Olga Molina
            if (priv.isAgregarFichaPediatria()) {
                PanelPediatria pd = new PanelPediatria();
                FichaPediatria fichaPedi = new FichaPediatria(null, true, pd);
                fichaPedi.limpiarFormulario();
                fichaPedi.setTitle("Agregar Ficha Pediatria");
                fichaPedi.ocultarAsteriscosFormulario(false);
                fichaPedi.setSize(1099, 600);
                fichaPedi.llenarFormularioAgregar(pac);
                fichaPedi.setLocationRelativeTo(null);
                fichaPedi.setVisible(true);
            }//ingresa jorge calvo Psiquiatra
            if (priv.isAgregarFichaSiquitria()) {
                PanelSiquiatra pd = new PanelSiquiatra();
                FichaSiquiatra fichaSiqui = new FichaSiquiatra(null, true, pd);
                fichaSiqui.limpiarFormularioSiqui();
                fichaSiqui.setTitle("Agregar Ficha Psiquiatra");
                fichaSiqui.ocultarAsteriscosFormulario(false);
                fichaSiqui.setSize(1068, 530);
                fichaSiqui.llenarFormularioAgregar(pac);
                fichaSiqui.setLocationRelativeTo(null);
                fichaSiqui.setVisible(true);
            }
            if (priv.isAgregarFichaMedicinaGeneral()) {
                DialogoInfoFichaMedicoGeneral fichaFar;
                FichaMedicoGeneral pd=TaskPaneGroupPaciente.panelFichaFarfan;
                try {
                    fichaFar = new DialogoInfoFichaMedicoGeneral(null, true, pd);
                    fichaFar.limpiarCampos();
                    fichaFar.setTitle("Agregar Ficha Medicina General");
                    fichaFar.getBotonAceptar().setText("Agregar");
                    fichaFar.getBotonAceptar().setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/Img/Iconos16X16/Agregar.png")));
                    fichaFar.getBotonCancelar().setText("Cancelar");
                    fichaFar.llenarCamposAgregar(pac);
                    fichaFar.inhavilitarRut();
                    fichaFar.setLocationRelativeTo(null);
                    fichaFar.setVisible(true);
                } catch (FileNotFoundException ex) {
                    Logger.getLogger(Paciente.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IOException ex) {
                    Logger.getLogger(Paciente.class.getName()).log(Level.SEVERE, null, ex);
                }

            }
        } else {
            this.etiquetaMensajeria.setText("Debe seleccionar una fila.");
            etiquetaMensajeria.setForeground(Color.red);
        }
    }//GEN-LAST:event_jButton1ActionPerformed

    private void datosABuscarKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_datosABuscarKeyReleased
        service.Privilegios priv = (service.Privilegios) cargarPrivilegios(Login.getUser().getRut());
        if (priv.isBuscarPaciente()) {
            if (!datosABuscar.getText().equals("")) {
                limpiarTabla();
                java.util.List<service.Paciente> lista = (java.util.List<service.Paciente>) filtrarPaciente(datosABuscar.getText());
                filtrarTabla(lista);
            } else {
                limpiarTabla();
                actualizarTabla();
            }
        }
    }//GEN-LAST:event_datosABuscarKeyReleased

    private void tablaPacientesMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tablaPacientesMouseClicked
        int fila = tablaPacientes.rowAtPoint(evt.getPoint());
        if ((fila > -1) && evt.getClickCount() == 2) {
            botonVerPacienteActionPerformed(null);
        }
    }//GEN-LAST:event_tablaPacientesMouseClicked

   
    public void cambiarEtiquetaMensajeria(String mensaje, Color color) {
        etiquetaMensajeria.setText(mensaje);
        etiquetaMensajeria.setForeground(color);
    }

    public void limpiarTabla() {
        DefaultTableModel temp = (DefaultTableModel) tablaPacientes.getModel();
        for (int i = tablaPacientes.getRowCount() - 1; i >= 0; i--) {
            temp.removeRow(i);
        }
    }

    public void normalizarEtiquetaMensajeria() {
        etiquetaMensajeria.setText("Área de mensajería");
        etiquetaMensajeria.setForeground(Color.black);
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton botonAgregarPaciente;
    private javax.swing.JButton botonEliminarPaciente;
    private javax.swing.JButton botonModificarPaciente;
    private javax.swing.JButton botonNoEliminar;
    private javax.swing.JButton botonSiEliminar;
    private javax.swing.JButton botonVerPaciente;
    private javax.swing.JTextField datosABuscar;
    private javax.swing.JDialog dialogoEliminarPaciente;
    private javax.swing.JLabel etiquetaEliminar;
    private javax.swing.JLabel etiquetaMensajeria;
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JPanel jPanel5;
    private javax.swing.JPanel jPanel6;
    private javax.swing.JPanel jPanel7;
    private javax.swing.JScrollPane jScrollPane4;
    private javax.swing.JTable tablaPacientes;
    // End of variables declaration//GEN-END:variables

    private static Object cargarPaciente(java.lang.String rut) {
        service.PacienteWS_Service service = new service.PacienteWS_Service();
        service.PacienteWS port = service.getPacienteWSPort();
        return port.cargarPaciente(rut);
    }

    private static boolean eliminarPaciente(java.lang.String rut) {
        service.PacienteWS_Service service = new service.PacienteWS_Service();
        service.PacienteWS port = service.getPacienteWSPort();
        return port.eliminarPaciente(rut);
    }

    private static java.util.List<service.Paciente> listarPacientes() {
        service.PacienteWS_Service service = new service.PacienteWS_Service();
        service.PacienteWS port = service.getPacienteWSPort();
        return port.listarPacientes();
    }

    private static Object cargarPrivilegios(java.lang.String rut) {
        service.PrivilegiosWS_Service service = new service.PrivilegiosWS_Service();
        service.PrivilegiosWS port = service.getPrivilegiosWSPort();
        return port.cargarPrivilegios(rut);
    }

    private static java.util.List<service.Paciente> filtrarPaciente(java.lang.String buscar) {
        service.PacienteWS_Service service = new service.PacienteWS_Service();
        service.PacienteWS port = service.getPacienteWSPort();
        return port.filtrarPaciente(buscar);
    }

    private static Long registrar(service.Usuario usuario, java.lang.String modulo, java.lang.String accion, java.lang.String valorAnterior, java.lang.String valorNuevo) {
        service.BitacoraWSService service = new service.BitacoraWSService();
        service.BitacoraWS port = service.getBitacoraWSPort();
        return port.registrar(usuario, modulo, accion, valorAnterior, valorNuevo);
    }

    private static java.util.List<service.EnlaceProfesionalPaciente> listarEnlaceProfesionalPacientes() {
        service.EnlaceProfesionalPacienteWSService service = new service.EnlaceProfesionalPacienteWSService();
        service.EnlaceProfesionalPacienteWS port = service.getEnlaceProfesionalPacienteWSPort();
        return port.listarEnlaceProfesionalPacientes();
    }

    private static boolean isPacienteEnlazadoAProfesional(java.lang.String rutPaciente, java.lang.String rutProfesional) {
        service.EnlaceProfesionalPacienteWSService service = new service.EnlaceProfesionalPacienteWSService();
        service.EnlaceProfesionalPacienteWS port = service.getEnlaceProfesionalPacienteWSPort();
        return port.isPacienteEnlazadoAProfesional(rutPaciente, rutProfesional);
    }
}
